#include <chaiscript/chaiscript.hpp>

#define TEST_LITERAL(v) test_literal(v, #v)

template<typename T>
bool test_literal(T val, const std::string &str)
{
  chaiscript::ChaiScript chai;
  T val2 = chai.eval<T>(str);
  std::cout << "Comparing : " << val << " " << val2 << '\n';
  return val == val2;
}

int main()
{
  if( TEST_LITERAL(0xF)
 && TEST_LITERAL(0xFF)
 && TEST_LITERAL(0xFFF)
 && TEST_LITERAL(0xFFFF)
 && TEST_LITERAL(0xFFFFF)
 && TEST_LITERAL(0xFFFFFF)
 && TEST_LITERAL(0xFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFFFFFFF)
 && TEST_LITERAL(0xFFFFFFFFFFFFFFFF) 
 
 
 && TEST_LITERAL(01)
 && TEST_LITERAL(017)
 && TEST_LITERAL(0177)
 && TEST_LITERAL(01777)
 && TEST_LITERAL(017777)
 && TEST_LITERAL(0177777)
 && TEST_LITERAL(01777777)
 && TEST_LITERAL(017777777)
 && TEST_LITERAL(0177777777)
 && TEST_LITERAL(01777777777)
 && TEST_LITERAL(017777777777)
 && TEST_LITERAL(0177777777777)
 && TEST_LITERAL(01777777777777)
 && TEST_LITERAL(017777777777777)
 && TEST_LITERAL(0177777777777777)
 && TEST_LITERAL(01777777777777777)
 && TEST_LITERAL(017777777777777777)
 && TEST_LITERAL(0177777777777777777)
 && TEST_LITERAL(01777777777777777777)
 && TEST_LITERAL(017777777777777777777)
 && TEST_LITERAL(0177777777777777777777)
 && TEST_LITERAL(01777777777777777777777)

 && TEST_LITERAL(1)
 && TEST_LITERAL(17)
 && TEST_LITERAL(177)
 && TEST_LITERAL(1777)
 && TEST_LITERAL(17777)
 && TEST_LITERAL(177777)
 && TEST_LITERAL(1777777)
 && TEST_LITERAL(17777777)
 && TEST_LITERAL(177777777)
 && TEST_LITERAL(1777777777)
 && TEST_LITERAL(17777777777)
 && TEST_LITERAL(177777777777)
 && TEST_LITERAL(1777777777777)
 && TEST_LITERAL(17777777777777)
 && TEST_LITERAL(177777777777777)
 && TEST_LITERAL(1777777777777777)
 && TEST_LITERAL(17777777777777777)
 && TEST_LITERAL(177777777777777777)
 && TEST_LITERAL(1777777777777777777)

)
  {
    return EXIT_SUCCESS;
  } else {
    return EXIT_FAILURE;
  }





}
